package com.madou.dbtool.redis.manager;

import cn.hutool.core.util.StrUtil;
import redis.clients.jedis.JedisMonitor;
import redis.clients.jedis.Protocol;

import java.util.List;

/**
 * @author miukoo
 * Redis多种默认下的管理器
 */
public interface RedisSourceManager {

    /**
     * 获取数据源名称
     * @return
     */
    public String getDataSourceName();

    /**
     * 获取数据库的数量
     * @return
     */
    public int getDBCount();

    /**
     * 是否集群
     * @return
     */
    public boolean isCluster();

    /**
     * 获取节点信息
     * @return
     */
    public List<RedisNodeInfo> getNodes();

    /**
     * 获取数据库的内容数量
     * @return
     */
    public Long getDBSize(int index);

    /**
     * 获取第一页的数据
     * @return
     */
    public List<byte[]>  getFirst(int index) ;

    /**
     * 执行一条命令
     * @param commandText
     * @return
     */
    public Object execute(int index,String commandText);

    /**
     * 执行一条命令
     * @param commandArgs
     * @return
     */
    public Object execute(int index,Protocol.Command command, byte[][] commandArgs);

    /**
     * 开启监控
     * @param jedisMonitor
     * @return
     */
    public void monitor(JedisMonitor jedisMonitor);

    /**
     * 克隆一个连接
     * @return
     */
    public RedisSourceManager cloneDirect();

    /**
     * 克隆一个集群连接
     * @return
     */
    public RedisSourceManager cloneCluster();

    /**
     * 关闭数据源
     */
    void close();

    default String parsePassword(String password) {
        if(StrUtil.isNotEmpty(password)) {
            if (password.contains("${")) {
                String str = password.replace("${", "").replace("}", "");
                return System.getenv(str);
            }
        }
        return password;
    }

}
